ApacheAirflow 1.10.13リリースによって解消されたpipenvのlockファイル生成時issueについてまとめてみた
はじめに
Amazon MWAA(Managed Workflow Apache Airflow)がリリースされて、Airflowを業務利用している人にとっては降って現れた選択肢と言えます。
そしてこのエントリー執筆の約12時間程前に Apache Airflow 1.10.13 がリリースされました。そう、1.10.12 は最新ではなくなった。(追従はいつになるのでしょう)
マイナーバージョンアップではあるのですが、pipenvを使っている場合に影響を及ぼす可能性大のfixが含まれています。
pipenv update apache-airflow
するだけで気にせず使えるようですが、万が一即時アップデートできない場合の対処も含めて書いてみました。
1.10.12が含んでいた、pipenvに影響するbug
該当のbugの要因は以下のissueによってfixされています。
上記issueとの重複扱いになっていますが、pipenv利用時に出くわしたbugのissueは以下の内容です。
Pipfile.lock更新時に以下のメッセージを見た方はそれなりにいるのではないかと思っています。
ERROR: Could not find a version that matches attrs>=17.3.0,>=17.4.0,>=20.1.0,~=19.3 Tried: 15.0.0, 15.1.0, 15.1.0, 15.2.0, 15.2.0, 16.0.0, 16.0.0, 16.1.0, 16.1.0, 16.2.0, 16.2.0, 16.3.0, 16.3.0, 17.1.0, 17.1.0, 17.2.0, 17.2.0, 17.3.0, 17.3.0, 17.4.0, 17.4.0, 18.1.0, 18.1.0, 18.2.0, 18.2.0, 19.1.0, 19.1.0, 19.2.0, 19.2.0, 19.3.0, 19.3.0, 20.1.0, 20.1.0, 20.2.0, 20.2.0, 20.3.0, 20.3.0
バージョンのマッチングにて、~=19.3
が原因で破綻している状態です。19.3以降のマイナーバージョンの更新は受付つつも、メジャーバージョンの更新を受け付けないという点で、>=17.3.0,>=17.4.0,>=20.1.0
と矛盾した形です。
原因はsetup.pyでした。
'attrs~=19.3', 'cached_property~=1.5', 'cattrs~=1.0',
長らくlockファイル更新でエラーを吐く原因になっていました。
対処方法として取られた手段
1.10.13では依存関係が修正されています。
'attrs>=20.0, <21.0', 'cached_property~=1.5', # cattrs >= 1.1.0 dropped support for Python 3.6 'cattrs>=1.0, <1.1.0;python_version<="3.6"', 'cattrs>=1.0, <2.0;python_version>"3.6"',
Airflowを1.10.13に更新することで、lockfileのエラーが解消するということです。
pipenv update apache-airflow
バージョンアップできない場合の対策
とはいえ、環境によっては更新できない可能性もあります。その場合はlock自体をskipしましょう。
pipenv install --skip-lock
これでも失敗する場合は、Pipfileが更新されていることを確認した上で、Pipfile.lockをcheckoutするという手もあります。ただし、syncがまともに使えなくなるデメリットが存在します。
あとがき
lockファイルが正常更新できないおかげで毎回installを行う羽目になる他、他のライブラリの追加や削除も相当に手間が懸かっていました。今後は大分楽になりそうです。